package com.bangcommunity.bbframe.media.pdf;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;

import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author tanghc
 * @date 18/7/2
 */
public class PdfUtil {
    /**
     * @param inputFile 你的PDF文件地址
     * @param outputFile 添加水印后生成PDF存放的地址
     * @param waterMarkName 你的水印
     * @return
     */
    public static boolean waterMark(String inputFile,
                                    String outputFile, String waterMarkName) {
        PdfReader reader = null;
        PdfStamper stamper =null;
        try {
            reader = new PdfReader(inputFile);
            stamper = new PdfStamper(reader, new FileOutputStream(
                    outputFile));
            //这里的字体设置比较关键，这个设置是支持中文的写法
            BaseFont base = BaseFont.createFont("STSong-Light",
                    "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);// 使用系统字体
            int total = reader.getNumberOfPages() + 1;

            PdfContentByte under;
            Rectangle pageRect = null;
            for (int i = 1; i < total; i++) {
                pageRect = stamper.getReader().
                        getPageSizeWithRotation(i);
                // 计算水印X,Y坐标
                float x = pageRect.getWidth()/10;
                float y = pageRect.getHeight()/10-10;
                // 获得PDF最顶层
                under = stamper.getOverContent(i);
                under.saveState();
                // set Transparency
                PdfGState gs = new PdfGState();
                // 设置透明度为0.2
                gs.setFillOpacity(1.f);
                under.setGState(gs);
                under.restoreState();
                under.beginText();
                under.setFontAndSize(base, pageRect.getWidth()/10);
                under.setColorFill(BaseColor.ORANGE);

                // 水印文字成45度角倾斜
                under.showTextAligned(Element.ALIGN_CENTER
                        , waterMarkName, x,
                        y, 55);
                // 添加水印文字
                under.endText();
                under.setLineWidth(1f);
                under.stroke();
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            if(null != stamper){
                try {
                    stamper.close();
                } catch (DocumentException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != reader){
                reader.close();
            }

        }
    }
//    public static boolean waterMarkImg(String inputFile,
//                                    String outputFile, String waterMarkFile) {
//        PdfReader reader = null;
//        PdfStamper stamper =null;
//        try {
//            reader = new PdfReader(inputFile);
//            stamper = new PdfStamper(reader, new FileOutputStream(
//                    outputFile));
//            Image img = Image.getInstance(waterMarkFile);
//            int total = reader.getNumberOfPages() + 1;
//
//            PdfContentByte under;
//            Rectangle pageRect = null;
//            for (int i = 1; i < total; i++) {
//                pageRect = stamper.getReader().
//                        getPageSizeWithRotation(i);
//                // 计算水印X,Y坐标
//                float x = pageRect.getWidth()/10;
//                float y = pageRect.getHeight()/10-10;
//                // 获得PDF最顶层
//                under = stamper.getOverContent(i);
//                under.saveState();
//                // set Transparency
//                PdfGState gs = new PdfGState();
//                // 设置透明度为0.2
//                gs.setFillOpacity(1.f);
//                under.setGState(gs);
//                under.restoreState();
//                under.beginText();
//                under.setFontAndSize(base, 60);
//                under.setColorFill(BaseColor.ORANGE);
//
//                // 水印文字成45度角倾斜
//                under.showTextAligned(Element.ALIGN_CENTER
//                        , waterMarkName, x,
//                        y, 55);
//                // 添加水印文字
//                under.endText();
//                under.setLineWidth(1f);
//                under.stroke();
//            }
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        } finally {
//            if(null != stamper){
//                try {
//                    stamper.close();
//                } catch (DocumentException e) {
//                    e.printStackTrace();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if(null != reader){
//                reader.close();
//            }
//
//        }
//    }

    public static void main(String[] args) {
        System.out.println(waterMark("/opt/data/test1.pdf","/opt/data/test2.pdf","测试测试测试测试"));
    }
}
